#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <hash_map>

using namespace std;
using namespace stdext;
/*
class LFUCache {
public:
    LFUCache(int capacity) {
        this->capacity = capacity;
        this->current = 0;
        queue.reserve(capacity);
    }
    
    int get(int key) {
        for(auto m_list : queue){
            if(m_list.klmp.find(key) != m_list.klmap.end()){
                auto iter = klmap[key];
                int value = *iter;
                keys.erase_after(--iter);
                klmap.erase(key);
                if(keys.empty()){
                    m_list = queue.erase(m_list);
                }else{
                    m_list = m_list + 1;
                }
                m_list.keys.push_back(value);
                m_list.klmap[key] = m_list.end();
                return value;
            }
        }
        return -1;
    }
    
    void put(int key, int value) {
        if(current)
    }
private:
    int current = 0;
    int capacity;
    using struct{ 
        map<int, const_iterator> klmap;//[key, const_iterator]
        forward_list<int> keys;//[values]
    }mpList;
    vector<mpList> queue;//[count[list]]
};
*/
int main(){
    int arr[] = {2, 2, 3, 1};
    int len = sizeof(arr)/sizeof(int);
//    vector<int> vec;

    hash_map<int, int> int_hash;
//    map<int, vector<int> > mp;
    for(int i = len-1; i >= 0; --i){
//        vec.push_back(arr[i]);
//        mp[i].push_back(arr[i]);
        int_hash[i] = arr[i];
    }
    for(auto p : int_hash){
        cout << p.first << " " << p.second << endl;
    }
//    Solution* s = new Solution();
//    cout << s->thirdMax(vec) << endl;
//    delete s;
    return 0;
}